﻿Public Class ZeitrapportManagerImpl
    Inherits ManagerImpl(Of Zeitrapport)
    Implements ZeitrapportManager

    Private Class ZeitrapportMapper
        Implements RowMapper(Of Zeitrapport)
        Public Function map(ByRef reader As System.Data.OleDb.OleDbDataReader) As Zeitrapport Implements RowMapper(Of Zeitrapport).map
            Dim zeitrapport As New Zeitrapport
            zeitrapport.id = reader("id")
            zeitrapport.anzahlMinuten = reader("anzahl_minuten")
            zeitrapport.kommentar = reader("kommentar")
            zeitrapport.mitarbeiter = New Mitarbeiter()
            zeitrapport.mitarbeiter.id = reader("mitarbeiter_id")
            Return zeitrapport
        End Function
    End Class

    Sub New()
        MyBase.new("zeitrapport", New ZeitrapportMapper)
    End Sub

    Public Overrides Sub insert(ByRef entity As Zeitrapport)
        Dim query As New Query()
        query.sql = "insert into " & tableName & " (anzahl_minuten, kommentar, task_id, mitarbeiter_id) values (:anzahlMinuten, :kommentar, :taskId, :mitarbeiterId)"
        query.setParameter("anzahlMinuten", entity.anzahlMinuten)
        query.setParameter("kommentar", entity.kommentar)
        query.setParameter("taskId", entity.task.id)
        query.setParameter("mitarbeiterId", entity.mitarbeiter.id)
        runQuery(query)
    End Sub

    Public Overrides Sub update(ByRef entity As Zeitrapport)
        Dim query As New Query()
        query.sql = "update " & tableName & " set anzahl_minuten=:anzahlMinuten, kommentar=:kommentar, task_id=:taskId, mitarbeiter_id=:mitarbeiterId where id=:id"
        query.setParameter("anzahlMinuten", entity.anzahlMinuten)
        query.setParameter("kommentar", entity.kommentar)
        query.setParameter("taskId", entity.task.id)
        query.setParameter("mitarbeiterId", entity.mitarbeiter.id)
        query.setParameter("id", entity.id)
        runQuery(query)
    End Sub

    Public Function findByTask(ByRef task As Task) As System.Collections.Generic.List(Of Zeitrapport) Implements ZeitrapportManager.findByTask
        Dim query As New Query()
        query.sql = "select * from " & tableName & " where task_id=:taskId"
        query.setParameter("taskId", task.id)
        Return selectQuery(query, New ZeitrapportMapper())
    End Function

    Public Function findByMitarbeiter(ByRef mitarbeiter As Mitarbeiter) As List(Of Zeitrapport) Implements ZeitrapportManager.findByMitarbeiter
        Dim query As New Query()
        query.sql = "select * from " & tableName & " where mitarbeiter_id=:mitarbeiterId"
        query.setParameter("mitarbeiterId", mitarbeiter.id)
        Return selectQuery(query, New ZeitrapportMapper())
    End Function

    Public Sub deleteByTask(ByRef task As Task) Implements ZeitrapportManager.deleteByTask
        Dim query As New Query()
        query.sql = "delete from " & tableName & " where task_id=:taskId"
        query.setParameter("taskId", task.id)
        runQuery(query)
    End Sub

    Public Sub deleteByMitarbeiter(ByRef mitarbeiter As Mitarbeiter) Implements ZeitrapportManager.deleteByMitarbeiter
        Dim query As New Query()
        query.sql = "delete from " & tableName & " where mitarbeiter_id=:mitarbeiterId"
        query.setParameter("mitarbeiterId", mitarbeiter.id)
        runQuery(query)
    End Sub


End Class
